﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace Processes
{
    public class GestorIngresoEgreso
    {
        public static ICollection getValores(int gestion,char tipo)
        {
            try
            {
                return DataBase.IngresoEgresoBD.getValores(gestion,tipo);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static void Actualizar(string nombre, string valor, string cantidad, string fecha,int hora,int minuto,bool act,int gestion,long evento,float inicial)
        {
            try
            {
                float val = float.Parse(valor);
                int cant = Convert.ToInt32(cantidad);
                DateTime fechaExacta= Convert.ToDateTime(fecha);
                if (act)
                {
                    fechaExacta = new DateTime(fechaExacta.Year, fechaExacta.Month, fechaExacta.Day, hora, minuto, 0);
                }
                DataBase.IngresoEgresoBD.Actualizar(nombre, val, cant, fechaExacta,gestion,evento,inicial);
            }
            catch (FormatException)
            {
                throw new Exception("Valor debe ser entero o decimal, cantidad debe ser entero");
            }
            catch (Exception exe)
            { 
                throw exe;
            }
        }
        public static void eliminarIE(string nombre,string total,int gestion,long evento)
        {
            try
            {
                float tot = float.Parse(total);
                

               DataBase.IngresoEgresoBD.Eliminar(nombre,tot,gestion,evento);
            }
            catch (FormatException)
            {
                throw new Exception("Total no es valido");
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static ICollection mostrarIE(string gestion, string evento)
        {
            bool a = true;
            try
            {
                int gest = Convert.ToInt32(gestion);
                a = false;
                long even = Convert.ToInt64(evento);
                return DataBase.IngresoEgresoBD.mostrarIE(gest, even);
            }
            catch (FormatException)
            {
                if (a)
                    throw new Exception("Gestion invalida");
                throw new Exception("Evento Invalido");
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public static ICollection mostrarTodosIE(string gestion, char tipo,ref double res)
        {
            bool a = true;
            try
            {
                int gest = Convert.ToInt32(gestion);
                a = false;
                char tip = Convert.ToChar(tipo);
                return DataBase.IngresoEgresoBD.mostrarTodosIE(gest, tip,ref res);
            }
            catch (FormatException)
            {
                if (a)
                    throw new Exception("Gestion invalida");
                throw new Exception("Evento Invalido");
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static void agregarIE(string nombre,int gestion,string evento, string cantidad, string valor, string fecha, string hora, string minuto)
        {
            bool a = true, b = true, c = true, d = true, e = true;
            try
            {
                if (String.IsNullOrEmpty(evento))
                    throw new Exception("no existe ningun evento plenificado");
                int cant = Convert.ToInt32(cantidad);
                if (cant <= 0) throw new Exception("La cantidad no puede ser menor o igual a 0");
                a = false;
                float val = float.Parse(valor);
                if (val <= 0) throw new Exception("El valor no puede ser menor o igual a 0");
                b = false;
                DateTime fechaExacta = Convert.ToDateTime(fecha);
                c = false;
                int horas=Convert.ToInt32(hora);
                d = false;
                int minutos=(Convert.ToInt32(minuto));
                e = false;
                long even = Convert.ToInt64(evento);
                fechaExacta = new DateTime(fechaExacta.Year, fechaExacta.Month, fechaExacta.Day, horas, minutos,0);
                DataBase.IngresoEgresoBD.insertarIE(nombre,gestion, even, val, cant, fechaExacta);
            }
            catch (FormatException)
            {
                if (a)
                    throw new Exception("introduzca una cantidad valida");
                if (b)
                    throw new Exception("introduzca un valor valida");
                if (c)
                    throw new Exception("fecha invalida");
                if (d)
                    throw new Exception("hora invalida");
                if (e)
                    throw new Exception("minutos invalidos");
               
                throw new Exception("Evento invalido");
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static ICollection getDatos(int gestion, char tipo)
        {
            try
            {
                return DataBase.IngresoEgresoBD.getDatos(gestion,tipo);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static bool verificarExistencia(int gestion)
        {
            try
            {
                return DataBase.IngresoEgresoBD.verificarExistencia(gestion);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public static ICollection getEventos(int gestion, char tipo)
        {

            try
            {
                return DataBase.IngresoEgresoBD.getIngresoEgreso(gestion, tipo);
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }
        public static ICollection getGestiones(string gestion, string inicio, string fin)
        {
            try
            {
                
                
                int gest = Convert.ToInt32(gestion);
                if (gest == 0)
                {
                    if (String.IsNullOrEmpty(inicio) || String.IsNullOrEmpty(fin))
                        throw new Exception("Complete los campos");
                }
                DateTime ini = new DateTime(), fi = new DateTime();
                if (inicio != null)
                {
                    ini = Convert.ToDateTime(inicio);
                    if (fin != null)
                        fi = Convert.ToDateTime(fin);
                    if (ini > fi) throw new Exception("La gestion inicial debe ser menor o igual a la final");
                }
                
                return DataBase.IngresoEgresoBD.getGestiones(gest, ini, fi);
            }

            catch (FormatException )
            {
                throw new Exception("Formato incorrecto") ;
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        public static void CrearIngresoEgreso(int gestion)
        {
            try
            {
                DataBase.IngresoEgresoBD.CrearIngresoEgreso(gestion,DateTime.Now);
            }
            catch(Exception e)
            {
                throw e;
            }
        }
    }
}
